
grammar JSON;

json    : object
        | array
        ;
//jsonObject 语法
object  : '{''}'
        | '{' pair (',' pair)* '}'
        ;

//key:val 语法
pair    : STRING ':' value ;

//jsonArray 语法
array   : '[' ']'
        | '[' value (',' value)* ']'
        ;

//value 可以是那些值
value   : STRING
        | NUMBER
        | object
        | array
        | 'true'
        | 'false'
        | 'null'
        ;

//字符串的定义
STRING  : '"' (ESC | ~["\\])* '"' ;
fragment
ESC     : '\\' (["\\/bfnrt] | UNICODE) ;
UNICODE : 'u' HEX HEX HEX HEX ;
HEX     : [0-9a-fA-F] ;

//数字的定义
NUMBER  : '-'? INT '.' INT EXP?
        | '-'? INT EXP
        | '-'? INT
        ;
fragment
INT     : '0' | [1-9] [0-9]* ;
EXP     : [Ee] [+\-]? INT ;

WS      : [ \t\n\r]+ -> skip;

